简单说一下算法:俄罗斯方块由四个小方块组成,假设你定义没每个小方块大小为20 * 20px,方块活动区域大小为:300宽 * 400高,那么你需要定义一个bool型二维数组来标记该活动区域方块的填充情况(以填记1或未填记0),那么该数组可以这么定义:bool isEmpty[20][15]; (20=400/20,15=300/20)。每当方块要落下来时先判断下一个位置是否为空,即 if ( isEmpty[][] == 0 ),若空则允许落下来,否则就停在当前位置,接着生成新的方块,重复刚才判断...... 好了,关于方块活动区域的算法已经大致清楚那么一点了,那么怎么生成一块完整的俄罗斯方块呢?我们知道,漂亮一些的俄罗斯方块通常有多种颜色,最常见的写法是使用GDI的FillRect()函数产生小色块,然后根据4个小方块的坐标填充出一个大的完整的俄罗斯方块(每个俄罗斯方块由四个小方块组成)假如我们要生成“口口口口”(长条),它的坐标可能是(0,0)(1,0)(2,0)(3,0),我们需要定义4个坐标来表示俄罗斯方块:POINT ptBlock[4]; 那么我们把ptBlock里记录的4个坐标填充完就生成一个完整的俄罗斯方块了。 好了,关于怎么生成一个俄罗斯方块我们也了解那么一点了,可是,我们玩游戏的时候不能预知下一块方块是什么形状(这个可以有提示),也就是说每个方块都是随机的,我们该这么做呢? 一般常见的俄罗斯方块有7种形状,那么我们可以每次产生一个0 ~ 6的随机数,然后根据这个数字生成随机方块:int iType = rand() % 7;switch( iType )